package com.gin.pixiv.api

import com.gin.pixiv.enums.FullWorkType
import com.gin.pixiv.enums.WorkCategory
import com.gin.pixiv.response.PixivResponse
import com.gin.pixiv.response.base.UserWorkBody
import com.gin.pixiv.response.illustration.SimpleIllustration
import com.gin.pixiv.response.novel.SimpleNovel
import com.gin.pixiv.response.profile.ProfileAll
import com.gin.pixiv.response.profile.ProfileTop
import com.gin.pixiv.response.profile.ProfileWorksBody
import com.gin.retrofit.annotation.StaticQuery
import pixiv.response.tag.UserWorkTag
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Query

/**
 * 用户作品API
 * @author BX-Gin
 * @since 2024/3/2 9:21
 */
interface UserWorkApi {
    /**
     * 查询用户作品中使用的标签
     */
    @GET("ajax/user/{userId}/{type}/tags")
    fun getUserWorkTags(
        @Path("type") fullWorkType: FullWorkType,
        @Path("userId") userId: Long,
    ): Call<PixivResponse<List<UserWorkTag>>>

    /**
     * 查询用户作品完整概况
     */
    @GET("ajax/user/{userId}/profile/all")
    fun getProfileAll(@Path("userId") userId: Long): Call<PixivResponse<ProfileAll>>

    /**
     * 查询用户首页概况
     */
    @GET("ajax/user/{userId}/profile/top")
    fun getProfileTop(@Path("userId") userId: Long): Call<PixivResponse<ProfileTop>>

    /**
     * 查询用户发布的绘画作品
     */
    @GET("ajax/user/{userId}/profile/illusts")
    @StaticQuery("is_first_page", "1")
    fun getProfileIllusts(
        @Path("userId") userId: Long,
        @Query("ids[]") ids: Set<Long>,
        @Query("work_category") workCategory: WorkCategory? = WorkCategory.illustManga,
    ): Call<PixivResponse<ProfileWorksBody<SimpleIllustration>>>

    /**
     * 查询含有指定标签的用户插画
     */
    @GET("ajax/user/{userId}/illusts/tag")
    fun getUserIllustsTag(
        @Path("userId") userId: Long,
        @Query("tag") tag: String,
        /**
         * 偏移量，0为第一页，每次叠加一个 limit 到下一页
         */
        @Query("offset") offset: Int? = 0,
        /**
         * 每页上限
         */
        @Query("limit") limit: Int? = 48,
    ): Call<PixivResponse<UserWorkBody<SimpleIllustration>>>

    /**
     * 查询含有指定标签的用户漫画
     */
    @GET("ajax/user/{userId}/manga/tag")
    fun getUserMangaTag(
        @Path("userId") userId: Long,
        @Query("tag") tag: String,
        /**
         * 偏移量，0为第一页，每次叠加一个 limit 到下一页
         */
        @Query("offset") offset: Int? = 0,
        /**
         * 每页上限
         */
        @Query("limit") limit: Int? = 48,
    ): Call<PixivResponse<UserWorkBody<SimpleIllustration>>>


    /**
     * 查询用户发布的小说
     */
    @GET("ajax/user/{userId}/profile/novels")
    fun getProfileNovels(
        @Path("userId") userId: Long,
        @Query("ids[]") ids: Set<Long>,
    ): Call<PixivResponse<ProfileWorksBody<SimpleNovel>>>

    /**
     * 查询含有指定标签的用户小说
     */
    @GET("ajax/user/{userId}/novels/tag")
    fun getUserNovelsTag(
        @Path("userId") userId: Long,
        @Query("tag") tag: String,
        /**
         * 偏移量，0为第一页，每次叠加一个 limit 到下一页
         */
        @Query("offset") offset: Int? = 0,
        /**
         * 每页上限
         */
        @Query("limit") limit: Int? = 30,
    ): Call<PixivResponse<UserWorkBody<SimpleNovel>>>

}